#ifndef GAME_H
#define GAME_H

#include <Windows.h>
#include "../Utility/Misc/HTable.h"

#include "Definitions.h"
#include "../EventSystem/Event.h"
#include "../Utility/Misc/Timer.h"
#include "GameStates/BaseState.h"
#include "GameStates/MainGame.h"

#include <vector>
using namespace std;

class Game
{
public:
	Game();
	~Game();
	Game(Game& game);

	static bool isRunning;
	static bool Initialize(HWND _hWnd, bool _bFullscreen, bool _bVsync, int _nScreenWidth, int _nScreenHeight);
	static void Run();
	static void Render();
	static void Update();
	static void Exit();
	static void CalculateFrameStats();
	static void DisplayMousePos();
	static Timer& GetTimer(){return timer;}

	static void HandleKeyInput(Event* _event);
	static void LoadDictionary();
	static unsigned int HashFunc(const string& Hash);
	static void SetupBoard();

	static void ChangeGameState(BaseState* _newState);

	static HTable<string> dictionary;
	static bool gameOver;

private:
	static Timer timer;
	static BaseState* currentState;
};


#endif